package ${packgeDO.servicePackageName};

import java.util.List;
import ${packgeDO.exceptionPackageName}.${domain.exceptionName};
import ${domain.packageName}.${domain.className};
import ${packgeDO.utilPackageName!}.Page;
<#assign len = domain.className?index_of("DO")>
<#assign param="${domain.className?uncap_first}">
 /**
 * ${data_object_comment} Service
 * @author yuwenjie ${create_time?if_exists?string("yyyy-MM-dd HH:mm:ss")}
 */
public interface ${domain.className?substring(0,len)}Service {
	
	/**
	 * 插入  ${data_object_comment}
	 * @param ${param}
	 * @return 主键
	 * @throws ${domain.exceptionName}
	 */
	int save(${domain.className} ${param}) throws ${domain.exceptionName};

	/**
	 * 根据${domain.className}对象动态更新 ${data_object_comment}
	 * @param ${param}
	 * @return 更新行数
	 * @throws ${domain.exceptionName}
	 */
	int updateDynamic(${domain.className} ${param}) throws ${domain.exceptionName};


	/**
	 * 根据ID删除 ${data_object_comment}
	 * @param id
	 * @return 物理删除行
	 * @throws ${domain.exceptionName}
	 */
	int deleteById(Long id) throws ${domain.exceptionName};

	/**
	 * 根据ID查询 一个 ${data_object_comment}
	 * @param id
	 * @return ${domain.className}
	 * @throws ${domain.exceptionName}
	 */
	${domain.className} selectById(Long id) throws ${domain.exceptionName};

	/**
	 * 根据  ${data_object_comment} 动态返回记录数
	 * @param ${param}
	 * @return 记录数
	 * @throws ${domain.exceptionName}
	 */
	Long selectCountDynamic(${domain.className} ${param}) throws ${domain.exceptionName};

	/**
	 * 动态返回 ${data_object_comment} 列表
	 * @param ${param}
	 * @return List<${domain.className}>
	 * @throws ${domain.exceptionName}
	 */
	List<${domain.className}> selectDynamic(${domain.className} ${param}) throws ${domain.exceptionName};

	/**
	 * 动态返回 ${data_object_comment} 分页列表
	 * @param ${param}
	 * @return Page<${domain.className}>
	 * @throws ${domain.exceptionName}
	 */
	Page<${domain.className}> pageQuery(${domain.className} ${param}) throws ${domain.exceptionName} ;

	/**
	 * 动态返回 ${data_object_comment} 分页列表
	 * @param ${param}
	 * @param startPage 起始页
	 * @param pageSize 每页记录数
	 * @return Page<${domain.className}>
	 * @throws ${domain.exceptionName}
	 */
	Page<${domain.className}> pageQueryByPageNo(${domain.className} ${param},int startPage,int pageSize) throws ${domain.exceptionName} ;

	 /**
	 * 批量新增
	 * @description saveForBatch
	 * @param list
	 * @throws ${domain.exceptionName}
	 */
	public void saveForBatch(List<${domain.className}> list) throws ${domain.exceptionName};
	
	/**
	 * 批量更新
	 * @description updateForBatch
	 * @param list
	 * @throws ${domain.exceptionName}
	 */
	public void updateForBatch(List<${domain.className}> list) throws ${domain.exceptionName};
	
	/**
	 * 查询 一个 ${data_object_comment}
	 * @param id
	 * @return ${domain.className}
	 * @throws ${domain.exceptionName}
	 */
	${domain.className} selectOne(${domain.className} ${param}) throws ${domain.exceptionName};
}
